package ec.linde.modulos.proyectos;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import org.primefaces.component.datatable.DataTable;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import ec.linde.modulos.proyectos.servicio.ServicioDatosBaseProyectos;
import ec.linde.persistencia.entidades.ProdCabeceraProforma;

/**
 * TODO: Agregar descripcion
 * 
 * @FechaCreacion: 29/03/2013
 * @author: Alex Carrillo
 * @FechaModificacion: 29/03/2013
 * @author: Alex Carrillo
 * @version: 1.0
 */
@ManagedBean
@ViewScoped
public class ProformaBean extends PageController {

	private static final long serialVersionUID = 1L;

	/**
	 * Servicios
	 */
	@EJB
	private ServicioDatosBaseProyectos servicioDatosBaseProyectos;

	/**
	 * Atributos Forma
	 */
	private ProdCabeceraProforma proforma;

	/**
	 * Listados 1. Lista Lazy DataModel 2. Lista Detalles 3. Listas Combo
	 */
	private LazyDataModel<ProdCabeceraProforma> listaProforma;

	/**
	 * UI
	 */
	private DataTable dtProforma;

	/**
	 * PostContrutor
	 */
	@PostConstruct
	public void init() {

		listaProforma = new LazyDataModel<ProdCabeceraProforma>() {

			private static final long serialVersionUID = 1L;

			@Override
			public List<ProdCabeceraProforma> load(int startIndex, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
				List<ProdCabeceraProforma> lista = new ArrayList<ProdCabeceraProforma>();

				boolean ordenar = sortOrder == SortOrder.ASCENDING ? true : false;
				lista = servicioDatosBaseProyectos.obtenerListaPorPaginaProformas(startIndex, pageSize, sortField, ordenar, filters);

				listaProforma.setRowCount(servicioDatosBaseProyectos.contarPorCriterioProforma(filters));

				return lista;
			}
		};

	}

	/**
	 * Metodos
	 */

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.asinfo.as2.controller.PageControllerAS2#editar()
	 */
	public String editar() {
		return "";
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.asinfo.as2.controller.PageControllerAS2#guardar()
	 */
	public String guardar() {
		return "";
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.asinfo.as2.controller.PageControllerAS2#eliminar()
	 */
	public String eliminar() {
		return "";
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see com.asinfo.as2.controller.PageControllerAS2#limpiar()
	 */
	public String limpiar() {
		return "";
	}

	public String generarProyecto() {
		if (proforma != null) {
			return "proyecto.xhtml?faces-redirect=true&idProforma=" + proforma.getCaprId();
		} else {
			addInfoMessage("Seleccione un Registro");
			return "";
		}

	}

	/**
	 * Metodos Eventos
	 */

	/**
	 * Metodos GET Y SET
	 */

	/**
	 * Get del atributo proforma
	 * 
	 * @return el valor del atributo proforma
	 */
	public ProdCabeceraProforma getProforma() {
		return proforma;
	}

	/**
	 * Set del atributo proforma
	 * 
	 * @param proforma
	 *            valor para asignar al atributo proforma
	 */
	public void setProforma(ProdCabeceraProforma proforma) {
		this.proforma = proforma;
	}

	/**
	 * Get del atributo listaProforma
	 * 
	 * @return el valor del atributo listaProforma
	 */
	public LazyDataModel<ProdCabeceraProforma> getListaProforma() {
		return listaProforma;
	}

	/**
	 * Set del atributo listaProforma
	 * 
	 * @param listaProforma
	 *            valor para asignar al atributo listaProforma
	 */
	public void setListaProforma(LazyDataModel<ProdCabeceraProforma> listaProforma) {
		this.listaProforma = listaProforma;
	}

	/**
	 * Get del atributo dtProforma
	 * 
	 * @return el valor del atributo dtProforma
	 */
	public DataTable getDtProforma() {
		return dtProforma;
	}

	/**
	 * Set del atributo dtProforma
	 * 
	 * @param dtProforma
	 *            valor para asignar al atributo dtProforma
	 */
	public void setDtProforma(DataTable dtProforma) {
		this.dtProforma = dtProforma;
	}

}
